package string;

import java.util.Objects;

public class Point {
    private int x;
    private int y;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public Point(){}

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }

    /*      调用Object的equals()，内部还是使用==比较地址，没有参考意义
             若想比较对象的属性值是否相同，我们认为Object类的equals()并不能满足需求
             因此常常重写equals()来比较属性值
            */

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }

    public static void main(String[] args) {

        Point p1 = new Point(100, 200);
        Point p2 = new Point(100, 200);
        System.out.println(p1==p2);// false  比较的是地址
        //System.out.println(p1.equals(p2));// false 默认继承object类中的equals（） 方法。这个方法默认就是==比较的
        System.out.println(p1.equals(p2));// true 因为重写了equals（）方法，比较规则是自己定义的
    }
}
